package com.example.auto_rental.utils;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @Name: Result
 * @Author: Jovan
 * @Date: 2024/9/12 16:14
 * @Description: 统一返回结果
 */
@Data
@Accessors(chain = true)
public class Result <T>{
    private  Integer code;
    private  String msg;
    private  Boolean success;
    private  T data;

    public Result(){}

    /*
    * 创建一个表示操作成功的Result对象。
    *
    * @param <T>结果对象的类型
    * @return 返回一个初始化为成功状态的Result对象，包含成功标志、成功代码和成功消息。
    * */
    public static <T> Result<T> success(){
        //创建Result对象并初始化为成功状态
        return new Result<T>().setSuccess(true).setCode(ResultCode.SUCCESS).setMsg("操作成功");
    }

    /*
    * 创建一个表示操作成功的的Result对象。
    *
    * @param data成功时返回的数据。
    * @param <T>数据的类型
    * @return 返回一个初始化为成功状态的Result对象，包含指定的数据。
    * */
    public static <T> Result<T> success(T data){
        //创建Result对象并初始化为成功状态，并设置返回的数据
        return new Result<T>().setSuccess(true).setCode(ResultCode.SUCCESS).setMsg("操作成功").setData(data);
    }

    /*
     * 创建一个表示操作失败的的Result对象。
     *
     * @param <T>结果对象的类型
     * @return 返回一个初始化为失败状态的Result对象，其中包含错误代码和消息。
     * */
    public static <T> Result<T> fail(){
        //创建Result对象并初始化为失败状态
        return new Result<T>().setSuccess(false).setCode(ResultCode.ERROR).setMsg("操作失败");
    }
}
